/**
 * 历史导航菜单
 * @type object
 * @since 1.0 <2015-7-7> SoChishun Added.
 * @since 1.1 <2015-7-21> SoChishun 新增cookie_name配置参数.
 */
var NavTabCookie = {
    config: {
        cookie_name: 'mnh_',
        container_id: '#nav_history',
        user_id: 0,
        debug: true,
    },
    init: function () {
        // 关闭菜单历史
        $(this.config.container_id).delegate('i', 'click', function () {
            var id = $(this).prev().data('id');
            NavTabCookie.remove(id);
        });
        // 设置当前菜单历史
        $(this.config.container_id).delegate('a', 'click', function () {
            NavTabCookie.active($(this).data('id'));
        });
        // 选中当前
        var json = this.get_json();
        if (json['cur']) {
            $(this.config.container_id).find('[data-id="' + json['cur'] + '"]').parent().addClass('cur');
        }
    },
    get_json: function () {
        var str = Cookies.get(this.config.cookie_name + this.config.user_id);
        if (!str) {
            return {ids: [], cur: 0};
        }
        return JSON.parse(str);
    },
    save_json: function (json) {
        this.debug(json, 'save_json');
        Cookies.set(this.config.cookie_name + this.config.user_id, JSON.stringify(json));
    },
    debug: function (o, label) {
        if (this.config.debug) {
            if (undefined == label) {
                label = '';
            } else {
                label = '.' + label;
            }
            console.log('[menu_history_cookie' + label + ']', o);
        }
    },
    active: function (id) {
        if (!id) {
            alert('[id]无效');
            return;
        }        
        var json = this.get_json();
        if ($.inArray(id.toString(), json['ids']) < 0) { // Number(id)
            alert('[id]已失效');
            return;
        }
        json['cur'] = id;
        this.save_json(json);
    },
    add: function (id) {
        if (!id) {
            alert('[id]无效');
            return;
        }
        var json = this.get_json();
        if ($.inArray(id.toString(), json['ids']) < 0) {
            json['ids'].push(id); // 追加到末尾
            if (json['ids'].length > 10) {
                json['ids'].shift(); // 如果超过最大数量则删除第一个
            }
        }
        json['cur'] = id;
        this.save_json(json);
    },
    remove: function (id) {
        if (!id) {
            alert('[id]无效');
            return;
        }
        var json = this.get_json();
        var idx = $.inArray(id.toString(), json['ids']);
        if (idx < 0) {
            return; // id不存在,直接退出
        }
        if (json['ids'].length < 2) {
            return;
        }
        var cur = json['cur'];
        if (json['ids'].length > (idx + 1)) {
            // 如果后面还有tab,则焦点放在后一个
            json['cur'] = json['ids'][idx + 1];
        } else {
            // 焦点放在前一个
            json['cur'] = json['ids'][idx - 1];
        }
        json['ids'].splice(idx, 1); // 删除已存在的id
        this.save_json(json);
        this.debug(typeof (cur) + ':' + typeof (id), 'remove');
        if (cur != Number(id)) {
            this.debug(cur + '!=' + id + ':' + json['cur'], 'remove');
            $(this.config.container_id).find('[data-id="' + id + '"]').parent().remove();
            $(this.config.container_id).find('[data-id="' + json['cur'] + '"]').parent().addClass('cur');
        } else {
            this.debug(cur + '==' + id + ':' + json['cur'], 'remove');
            var url = $(this.config.container_id).find('[data-id="' + json['cur'] + '"]').attr('href');
            location.href = url;
        }
    }
}